#! /usr/bin/env python
# -*- coding: utf-8 -*-


from si_4k.sistema.models import *
from si_4k.xlwt import *
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.contrib.auth.decorators import login_required
import mimetypes, os
from django.conf import settings
from datetime import datetime
from django.contrib import messages
from decimal import *
from  django.contrib.auth.decorators import permission_required
from datetime import *
from django.shortcuts import render_to_response, get_object_or_404, get_list_or_404, redirect
from django.core.urlresolvers import reverse
from django.template import RequestContext

#prefixo = ''

prefixo = '/home/edu4k/webapps/static_media/'

def duracao_aula(id_aula):
    aula = Aula.objects.get(id=id_aula)
    delta = aula.fim - aula.inicio
    return Decimal(delta.seconds)/3600

### Formato no Excel
titulo = easyxf(
    'font: bold 1, colour red, height 350;'
    'alignment: horizontal center, vertical center;'
    'borders: top thick, left thick, right thick, bottom thick;'
)

sub_titulo = easyxf(
    'font: bold 1;'
    'alignment: horizontal center, vertical center, wrap on;'
    'borders: top thick, left thick, right thick, bottom thick;'
)

normal = easyxf(
    'alignment: horizontal center, vertical center;'
    'borders: left thin, right thin, bottom thin;'
)

sub_titulo2 = easyxf(
    'font: bold 1;'
    'alignment: horizontal center, vertical center;'
    'borders: top medium, left medium, right medium, bottom medium;'
)

aula_font = easyxf(
    'font: bold 1, colour_index white ;'
    'pattern: pattern solid, fore_colour 0x10;'
    'borders: top medium, left medium, right medium, bottom medium;'
    'alignment: horizontal center, vertical center, wrap on;'
    
)

### Tabela para Gastos
def tabela_gastos(lista_gastos, sheet):
    sheet.merge(0,0,0,2)
    #Sub Titulos
    sheet.write(1,0,'Data', sub_titulo)
    sheet.write(1,1,'Descrição', sub_titulo)
    sheet.write(1,2,'Valor', sub_titulo)
    #Tamanho da Célula
    sheet.col(0).width = 5000
    sheet.col(1).width = 8000
    sheet.col(2).width = 2800
    #Impressao de dados
    i = 2
    for gasto in lista_gastos:
        sheet.write (i,0,str(gasto.data.day)+'-'+str(gasto.data.month)+'-'+str(gasto.data.year), normal)
        sheet.write (i,1,gasto.descricao, normal)
        sheet.write (i,2,gasto.valor, normal)
        i += 1
    return None

def exporta_gastos (request):
    #Abrindo uma nova tabela
    export = Workbook(encoding="utf-8")
    
    ano_inicial = 2009
    hoje = datetime.now()
    while (ano_inicial <= hoje.year):
        #Adicionar aba
        sheet = export.add_sheet(str(ano_inicial))
        #Pega os dados
        lista_gastos = Gastos.objects.filter(data__year=ano_inicial)
        #Imprime dados na tabela
        tabela_gastos(lista_gastos, sheet)
        #Titulo
        sheet.write (0,0,'Gastos de '+str(ano_inicial),titulo)
        ano_inicial += 1
    #Salvando o arquivo
    export.save(prefixo+'arquivos/excel/gastos.xls')
    
    #download automático
    file = open(prefixo+'arquivos/excel/gastos.xls',"rb+")
    mimetype, encoding = mimetypes.guess_type('gastos.xls')
    response = HttpResponse(file.read(), mimetype=mimetype)
    response["Content-Disposition"]= 'application/force-download'
    response["Content-Disposition"]= 'attachment; filename=gastos.xls'
    return response    
###################################################################################
### Tabela para Inventário
def tabela_inventario(lista_inventarios, sheet):
    sheet.merge(0,0,0,4)
    #Sub Titulos
    sheet.write(1,0,'Objeto', sub_titulo)
    sheet.write(1,1,'Quantidade', sub_titulo)
    sheet.write(1,2,'Data da Compra', sub_titulo)
    sheet.write(1,3,'Local da Compra', sub_titulo)
    sheet.write(1,4,'Valor (R$) ', sub_titulo)
    #Tamanho da Célula
    sheet.col(0).width = 5000
    sheet.col(1).width = 8000
    sheet.col(2).width = 5000
    sheet.col(3).width = 5000
    sheet.col(4).width = 5000
    #Impressao de dados
    i = 2
    for inventario in lista_inventarios:
        lista_estoques = Estoque.objects.filter(inventario=inventario).order_by('data_compra')
        for estoque in lista_estoques:
            sheet.write (i,0,inventario.objeto, normal)
            sheet.write (i,1,estoque.quantidade, normal)
            sheet.write (i,2,str(estoque.data_compra.day)+'-'+str(estoque.data_compra.month)+'-'+str(estoque.data_compra.year), normal)
            sheet.write (i,3,estoque.local_compra, normal)
            sheet.write (i,4,estoque.valor, normal)
            i += 1
        sheet.write (i,0,'Quantidade Total', sub_titulo2)
        sheet.write (i,1,inventario.quantidade_total, sub_titulo2)
        sheet.write (i,2,'', normal)
        sheet.write (i,3,'Valor Total', sub_titulo2)
        sheet.write (i,4,inventario.valor_total, sub_titulo2)
        i += 1
    return None

def exporta_inventario (request):
    #Abrindo uma nova tabela
    export = Workbook(encoding="utf-8")

    #Adicionar aba
    sheet = export.add_sheet('Estoque')
    #Pega os dados
    lista_inventarios = Inventario.objects.all().order_by('objeto')
    #Imprime dados na tabela
    tabela_inventario(lista_inventarios, sheet)
    #Titulo
    sheet.write (0,0,'Inventários',titulo)
    #Salvando o arquivo
    export.save(prefixo+'arquivos/excel/inventarios.xls')
    
    #download automático
    file = open(prefixo+'arquivos/excel/inventarios.xls',"rb+")
    mimetype, encoding = mimetypes.guess_type('inventarios.xls')
    response = HttpResponse(file.read(), mimetype=mimetype)
    response["Content-Disposition"]= 'application/force-download'
    response["Content-Disposition"]= 'attachment; filename=inventarios.xls'
    return response

########################################################################################
### Tabela para Detalhes dos Usuários
def tabela_usuario(lista_usuario, sheet):
    sheet.merge(0,0,0,17)
    #Sub Titulos
    sheet.write(1,0,'Login', sub_titulo)
    sheet.write(1,1,'Nome', sub_titulo)
    sheet.write(1,2,'Cargo', sub_titulo)
    sheet.write(1,3,'E-mail', sub_titulo)
    sheet.write(1,4,'E-mail 2', sub_titulo)
    sheet.write(1,5,'Data de Nascimento', sub_titulo)
    sheet.write(1,6,'Endereço', sub_titulo)
    sheet.write(1,7,'Telefone', sub_titulo)
    sheet.write(1,8,'Celular', sub_titulo)
    sheet.write(1,9,'Naturalidade', sub_titulo)
    sheet.write(1,10,'R.G.', sub_titulo)
    sheet.write(1,11,'CPF', sub_titulo)
    sheet.write(1,12,'Formação', sub_titulo)
    sheet.write(1,13,'Carteira de trabalho', sub_titulo)
    sheet.write(1,14,'Pis', sub_titulo)
    sheet.write(1,15,'Nome do Pai', sub_titulo)
    sheet.write(1,16,'Nome da Mãe', sub_titulo)
    sheet.write(1,17,'Observações', sub_titulo)
    #Tamanho da Célula
    sheet.col(0).width = 5000
    sheet.col(1).width = 5000
    sheet.col(2).width = 5000
    sheet.col(3).width = 8000
    sheet.col(4).width = 8000
    sheet.col(5).width = 5000
    sheet.col(6).width = 8000
    sheet.col(7).width = 2800
    sheet.col(8).width = 2800
    sheet.col(9).width = 5000
    sheet.col(10).width = 3500
    sheet.col(11).width = 3500
    sheet.col(12).width = 5000
    sheet.col(13).width = 5000
    sheet.col(14).width = 2800
    sheet.col(15).width = 3500
    sheet.col(16).width = 3500
    sheet.col(17).width = 8000
    
    #Impressao de dados
    i = 2
    for usuario in lista_usuario:
        sheet.write (i,0,usuario.user.username, normal)
        sheet.write (i,1,usuario.nome, normal)
        sheet.write (i,2,usuario.cargo, normal)
        sheet.write (i,3,usuario.email, normal)
        sheet.write (i,4,usuario.email2, normal)
        sheet.write (i,5,str(usuario.data_nascimento.day)+'-'+str(usuario.data_nascimento.month)+'-'+str(usuario.data_nascimento.year), normal)
        sheet.write (i,6,usuario.endereco, normal)
        sheet.write (i,7,usuario.telefone, normal)
        sheet.write (i,8,usuario.celular, normal)
        sheet.write (i,9,usuario.naturalidade, normal)
        sheet.write (i,10,usuario.rg, normal)
        sheet.write (i,11,usuario.cpf, normal)
        sheet.write (i,12,usuario.formacao, normal)
        sheet.write (i,13,usuario.carteira_trabalho, normal)
        sheet.write (i,14,usuario.pis, normal)
        sheet.write (i,15,usuario.nome_pai, normal)
        sheet.write (i,16,usuario.nome_mae, normal)
        sheet.write (i,17,usuario.bloconotas, normal)
        i += 1
    return None

def exporta_usuario (request):
    #Abrindo uma nova tabela
    export = Workbook(encoding="utf-8")

    #Adicionar aba
    sheet = export.add_sheet('Usuários')
    #Pega os dados
    lista_usuario = DetalheUsuario.objects.all().order_by('nome')
    #Imprime dados na tabela
    tabela_usuario(lista_usuario, sheet)
    #Titulo
    sheet.write (0,0,'Usuários',titulo)
    #Salvando o arquivo
    export.save(prefixo+'arquivos/excel/usuario.xls')
    
    #download automático
    file = open(prefixo+'arquivos/excel/usuario.xls',"rb+")
    mimetype, encoding = mimetypes.guess_type('usuario.xls')
    response = HttpResponse(file.read(), mimetype=mimetype)
    response["Content-Disposition"]= 'application/force-download'
    response["Content-Disposition"]= 'attachment; filename=usuario.xls'
    return response    
    
###################################################################################
### Tabela para Professor
def tabela_professor(lista_professores, sheet):
    sheet.merge(0,0,0,18)
    #Sub Titulos
    sheet.write(1,0,'Login', sub_titulo)
    sheet.write(1,1,'Nome', sub_titulo)
    sheet.write(1,2,'Cargo', sub_titulo)
    sheet.write(1,3,'Valor hora/aula', sub_titulo)
    sheet.write(1,4,'E-mail', sub_titulo)
    sheet.write(1,5,'E-mail 2', sub_titulo)
    sheet.write(1,6,'Data de Nascimento', sub_titulo)
    sheet.write(1,7,'Endereço', sub_titulo)
    sheet.write(1,8,'Telefone', sub_titulo)
    sheet.write(1,9,'Celular', sub_titulo)
    sheet.write(1,10,'Naturalidade', sub_titulo)
    sheet.write(1,11,'R.G.', sub_titulo)
    sheet.write(1,12,'CPF', sub_titulo)
    sheet.write(1,13,'Formação', sub_titulo)
    sheet.write(1,14,'Carteira de trabalho', sub_titulo)
    sheet.write(1,15,'Pis', sub_titulo)
    sheet.write(1,16,'Nome do Pai', sub_titulo)
    sheet.write(1,17,'Nome da Mãe', sub_titulo)
    sheet.write(1,18,'Observações', sub_titulo)
    
    #Tamanho da Célula
    sheet.col(0).width = 5000
    sheet.col(1).width = 5000
    sheet.col(2).width = 5000
    sheet.col(3).width = 4000
    sheet.col(4).width = 8000
    sheet.col(5).width = 5000
    sheet.col(6).width = 8000
    sheet.col(7).width = 10000
    sheet.col(8).width = 2800
    sheet.col(9).width = 2800
    sheet.col(10).width = 5000
    sheet.col(11).width = 3500
    sheet.col(12).width = 3500
    sheet.col(13).width = 5000
    sheet.col(14).width = 5000
    sheet.col(15).width = 2800
    sheet.col(16).width = 3500
    sheet.col(17).width = 3500
    sheet.col(18).width = 18000
    
    #Impressao de dados
    i = 2
    for professor in lista_professores:
        lista_detalhes = DetalheUsuario.objects.filter(nome = professor.detalheusuario.nome)
        for detalhe in lista_detalhes:
            sheet.write (i,0, detalhe.user.username, normal)
            sheet.write (i,1,detalhe.nome, normal)
            sheet.write (i,2,detalhe.cargo, normal)
            sheet.write (i,3,professor.valor, normal)
            sheet.write (i,4,detalhe.email, normal)
            sheet.write (i,5,detalhe.email2, normal)
            sheet.write (i,6,str(detalhe.data_nascimento.day)+'-'+str(detalhe.data_nascimento.month)+'-'+str(detalhe.data_nascimento.year), normal)
            sheet.write (i,7,detalhe.endereco, normal)
            sheet.write (i,8,detalhe.telefone, normal)
            sheet.write (i,9,detalhe.celular, normal)
            sheet.write (i,10,detalhe.naturalidade, normal)
            sheet.write (i,11,detalhe.rg, normal)
            sheet.write (i,12,detalhe.cpf, normal)
            sheet.write (i,13,detalhe.formacao, normal)
            sheet.write (i,14,detalhe.carteira_trabalho, normal)
            sheet.write (i,15,detalhe.pis, normal)
            sheet.write (i,16,detalhe.nome_pai, normal)
            sheet.write (i,17,detalhe.nome_mae, normal)
            sheet.write (i,18,detalhe.bloconotas, normal)
            i += 1
        i += 1
    return None

def exporta_professor(request):
    #Abrindo uma nova tabela
    export = Workbook(encoding="utf-8")

    #Adicionar aba
    sheet = export.add_sheet('Professor')
    #Pega os dados
    lista_professores = Professor.objects.all()
    #Imprime dados na tabela
    tabela_professor(lista_professores, sheet)
    #Titulo
    sheet.write (0,0,'Professores',titulo)
    #Salvando o arquivo
    export.save(prefixo+'arquivos/excel/professores.xls')
    
    #download automático
    file = open(prefixo+'arquivos/excel/professores.xls',"rb+")
    mimetype, encoding = mimetypes.guess_type('professores.xls')
    response = HttpResponse(file.read(), mimetype=mimetype)
    response["Content-Disposition"]= 'application/force-download'
    response["Content-Disposition"]= 'attachment; filename=professores.xls'
    return response    
   
##################################################################################
### Tabela para Pagamento
def tabela_pagamentos(lista_pagamentos, sheet):
    sheet.merge(0,0,0,3)
    #Sub Titulos
    sheet.write(1,0,'Aluno', sub_titulo)
    sheet.write(1,1,'Valor (R$)', sub_titulo)
    sheet.write(1,2,'Data', sub_titulo)
    sheet.write(1,3,'Desconto (R$) ', sub_titulo)
    #Tamanho da Célula
    sheet.col(0).width = 12000
    sheet.col(1).width = 5000
    sheet.col(2).width = 5000
    sheet.col(3).width = 5000
    #Impressao de dados
    i = 2
    for pagamento in lista_pagamentos:
        sheet.write (i,0,pagamento.aluno.nome, normal)
        sheet.write (i,1,pagamento.valor, normal)
        sheet.write (i,2,str(pagamento.data.day)+'-'+str(pagamento.data.month)+'-'+str(pagamento.data.year), normal)
        sheet.write (i,3,pagamento.desconto, normal)
        i += 1
    return None

def exporta_pagamento (request):
    #Abrindo uma nova tabela
    export = Workbook(encoding="utf-8")
    mes = 1
    while (mes<13):  
        #Adicionar aba
        if (mes==1):
            sheet = export.add_sheet('Janeiro')
        elif (mes==2):
            sheet = export.add_sheet('Fevereiro')
        elif (mes==3):
            sheet = export.add_sheet('Marco')
        elif (mes==4):
            sheet = export.add_sheet('Abril')
        elif (mes==5):
            sheet = export.add_sheet('Maio')
        elif (mes==6):
            sheet = export.add_sheet('Junho')
        elif (mes==7):
            sheet = export.add_sheet('Julho')
        elif (mes==8):
            sheet = export.add_sheet('Agosto')
        elif (mes==9):
            sheet = export.add_sheet('Setembro')
        elif (mes==10):
            sheet = export.add_sheet('Outubro')
        elif (mes==11):
            sheet = export.add_sheet('Novembro')
        elif (mes==12):
            sheet = export.add_sheet('Dezembro')
        
        ano = request.POST['ano']
         #Pega os dados
        lista_pagamentos = Pagamento.objects.filter(data__year=int(ano)).filter(data__month=mes).order_by('data')
        #Imprime dados na tabela
        tabela_pagamentos(lista_pagamentos, sheet)
        sheet.write (0,0,'Pagamentos',titulo) # Título
        mes += 1
    
    #Titulo
    
    #Salvando o arquivo
    export.save(prefixo+'arquivos/excel/pagamentos.xls')
    
    #download automático
    file = open(prefixo+'arquivos/excel/pagamentos.xls',"rb+")
    mimetype, encoding = mimetypes.guess_type('pagamentos.xls')
    response = HttpResponse(file.read(), mimetype=mimetype)
    response["Content-Disposition"]= 'application/force-download'
    response["Content-Disposition"]= 'attachment; filename=pagamentos.xls'
    return response    
    
    
###########################################################################################
### Tabela para Aluno
def tabela_aluno(lista_alunos, sheet):
    sheet.merge(0,0,0,16)
    #Sub Titulos
    sheet.write(1,0,'Aluno', sub_titulo)
    sheet.write(1,1,'Data de nascimento', sub_titulo)
    sheet.write(1,2,'Colégio', sub_titulo)
    sheet.write(1,3,'Série', sub_titulo)
    sheet.write(1,4,'Endereço', sub_titulo)
    sheet.write(1,5,'Cidade', sub_titulo)
    sheet.write(1,6,'Telefone de casa', sub_titulo)
    sheet.write(1,7,'Telefone Celular', sub_titulo)
    sheet.write(1,8,'E-mail principal', sub_titulo)
    sheet.write(1,9,'E-mail secundario', sub_titulo)
    sheet.write(1,10,'Nome responsável', sub_titulo)
    sheet.write(1,11,'Telefone dos pais', sub_titulo)
    sheet.write(1,12,'CPF do responsável', sub_titulo)
    sheet.write(1,13,'Data de ingresso', sub_titulo)
    sheet.write(1,14,'Observações', sub_titulo)
    sheet.write(1,15,'Último Relatório Emitido', sub_titulo)
    #Tamanho da Célula
    sheet.col(0).width = 12000
    sheet.col(1).width = 5000
    sheet.col(2).width = 2800
    sheet.col(3).width = 2800
    sheet.col(4).width = 8000
    sheet.col(5).width = 5000
    sheet.col(6).width = 4800
    sheet.col(7).width = 4800
    sheet.col(8).width = 12000
    sheet.col(9).width = 12000
    sheet.col(10).width = 12000
    sheet.col(11).width = 4800
    sheet.col(12).width = 5000
    sheet.col(13).width = 5000
    sheet.col(14).width = 18000
    sheet.col(15).width = 18000
    sheet.col(16).width = 5000
    #Impressao de dados
    i = 2
    for aluno in lista_alunos:
        sheet.write (i,0,aluno.nome, normal)
        try:
            sheet.write (i,1,aluno.data_nascimento.strftime("%d/%m/%y"), normal)
        except:
            sheet.write (i,1,None, normal)
        sheet.write (i,2,aluno.colegio, normal)
        sheet.write (i,3,aluno.serie, normal)
        sheet.write (i,4,aluno.endereco, normal)
        sheet.write (i,5,aluno.cidade, normal)
        sheet.write (i,6,aluno.telefone_casa, normal)
        sheet.write (i,7,aluno.celular, normal)
        sheet.write (i,8,aluno.email_1, normal)
        sheet.write (i,9,aluno.email_2, normal)
        sheet.write (i,10,aluno.responsavel, normal)
        sheet.write (i,11,aluno.telefone_pais, normal)
        sheet.write (i,12,aluno.cpf_responsavel, normal)
        try:
            sheet.write (i,13,aluno.data_ingresso.strftime("%d/%m/%y"), normal)
        except:
            sheet.write (i,13,None, normal)
        sheet.write (i,14,aluno.obs, normal)
        sheet.write (i,15,aluno.ultimo_relatorio, normal)
        i += 1
    return None

    
def exporta_aluno (request):
    #Abrindo uma nova tabela
    export = Workbook(encoding="utf-8")
    #Adicionar aba
    sheet = export.add_sheet('Alunos')
    #Pega os dados
    lista_alunos = Aluno.objects.all()
    #Imprime dados na tabela
    tabela_aluno(lista_alunos, sheet)
    #Titulo
    sheet.write (0,0,'Alunos',titulo)
    #Salvando o arquivo
    export.save(prefixo+'arquivos/excel/alunos.xls')
    
    #download automático
    file = open(prefixo+'arquivos/excel/alunos.xls',"rb+")
    mimetype, encoding = mimetypes.guess_type('alunos.xls')
    response = HttpResponse(file.read(), mimetype=mimetype)
    response["Content-Disposition"]= 'application/force-download'
    response["Content-Disposition"]= 'attachment; filename=alunos.xls'
    return response    
    
#################################################################################    
### Tabela para Aulas
def tabela_aulas(lista_aulas, sheet):
    sheet.merge(0,0,0,6)
    #Sub Titulos
    sheet.write(1,0,'Professor', sub_titulo)
    sheet.write(1,1,'Aluno', sub_titulo)
    sheet.write(1,2,'Local', sub_titulo)
    sheet.write(1,3,'Inicio', sub_titulo)
    sheet.write(1,4,'Fim', sub_titulo)
    sheet.write(1,5,'Valor (R$)', sub_titulo)
    sheet.write(1,6,'Tipo', sub_titulo)
        
    #Tamanho da Célula
    sheet.col(0).width = 5000
    sheet.col(1).width = 20000
    sheet.col(2).width = 5000
    sheet.col(3).width = 5000
    sheet.col(4).width = 5000
    sheet.col(5).width = 5000
    sheet.col(6).width = 5000
    
    #Impressao de dados
    i = 2  
    for aula in lista_aulas:
        sheet.write (i,0,aula.professor.detalheusuario.nome, normal)
        sheet.write (i,2,aula.local.nome, normal)
        sheet.write (i,3,str(aula.inicio), normal)
        sheet.write (i,4,str(aula.fim), normal)
        sheet.write (i,5,aula.valor*duracao_aula(aula.id), normal)
        sheet.write (i,6,aula.tipo, normal)
        
        lista_alunos = aula.aluno.all()
        alunos = ''
        for aluno in lista_alunos:
            alunos = alunos + aluno.nome + '; '  
        sheet.write (i,1,alunos, normal)
            
        i += 1
    return None

def exporta_aulas (request):
    #Abrindo uma nova tabela
    export = Workbook(encoding="utf-8")

    #Adicionar aba
    sheet = export.add_sheet('Aulas')
    #Pega os dados]
    lista_aulas = Aula.objects.all()
    #lista_aulas = Aula.objects.filter(aluno = aluno).filter(inicio = inicio).order_by('aluno')
    #Imprime dados na tabela
    tabela_aulas(lista_aulas, sheet)
    #Titulo
    sheet.write (0,0,'Aulas',titulo)
    #Salvando o arquivo
    export.save(prefixo+'arquivos/excel/aulas.xls')
    
    #download automático
    file = open(prefixo+'arquivos/excel/aulas.xls',"rb+")
    mimetype, encoding = mimetypes.guess_type('aulas.xls')
    response = HttpResponse(file.read(), mimetype=mimetype)
    response["Content-Disposition"]= 'application/force-download'
    response["Content-Disposition"]= 'attachment; filename=aulas.xls'
    return response    
  
### Tabela para Historico de Aula do aluno
def tabela_historico(lista_aulas, sheet):
    sheet.merge(0,0,0,8)
    #Sub Titulos
    sheet.write(1,0,'Aluno', sub_titulo)    
    sheet.write(1,1,'Professor', sub_titulo)
    sheet.write(1,2,'Local', sub_titulo)
    sheet.write(1,3,'Tipo de Aula', sub_titulo)
    sheet.write(1,4,'Início', sub_titulo)
    sheet.write(1,5,'Fim', sub_titulo)
    sheet.write(1,6,'Valor (R$)', sub_titulo)
    sheet.write(1,7,'Tipo', sub_titulo)
    sheet.write(1,8,'Descrição', sub_titulo)    
        
    #Tamanho da Célula
    sheet.col(0).width = 12000
    sheet.col(1).width = 12000
    sheet.col(2).width = 20000
    sheet.col(3).width = 5000
    sheet.col(4).width = 5000
    sheet.col(5).width = 5000
    sheet.col(6).width = 5000
    sheet.col(7).width = 8000
    sheet.col(8).width = 12000
    
    #Impressao de dados
    i = 2  
    for aula in lista_aulas:
        sheet.write (i,1,aula.professor.detalheusuario.nome, normal)
        sheet.write (i,2,aula.local.nome, normal)
        sheet.write (i,3,aula.tipo, normal)
        sheet.write (i,4,str(aula.inicio), normal)
        sheet.write (i,5,str(aula.fim), normal)
        sheet.write (i,6,aula.valor*duracao_aula(aula.id), normal)
        sheet.write (i,7,aula.tipo, normal)
        sheet.write (i,8,aula.relatorio.descricao, normal)
        
        lista_alunos = aula.aluno.all()
        alunos = ''
        for nombre in lista_alunos:
            alunos = alunos + nombre.nome + ';'  
        sheet.write (i,0,alunos, normal)
        i += 1
    return None

def exporta_historico (request, id_aluno):
    #Abrindo uma nova tabela
    export = Workbook(encoding="utf-8")

    #Adicionar aba
    sheet = export.add_sheet('Histórico de Aulas')
    #Pega os dados
    lista_alunos = Aluno.objects.get(id=id_aluno)
    lista_aulas = Aula.objects.filter(aluno=lista_alunos)
    #Imprime dados na tabela
    tabela_historico(lista_aulas, sheet)
    #Titulo
    sheet.write (0,0,'Histórico de Aulas',titulo)
    #Salvando o arquivo
    export.save(prefixo+'arquivos/excel/historico_de_aulas.xls')
    
    #download automático
    file = open(prefixo+'arquivos/excel/historico_de_aulas.xls',"rb+")
    mimetype, encoding = mimetypes.guess_type('historico_de_aulas.xls')
    response = HttpResponse(file.read(), mimetype=mimetype)
    response["Content-Disposition"]= 'application/force-download'
    response["Content-Disposition"]= 'attachment; filename=aulas.xls'
    return response


##########################################################
############## Tabela de Aulas do Dia ####################
##########################################################
def tabela_aulas_dia(lista_aulas, unidade, sheet):
    sheet.merge(0,0,0,8)
    
    #Locais de aula
    lista_locais = Local.objects.filter(unidade=unidade)
    i=1
    for local in lista_locais:
        sheet.write(1,i,local.nome, sub_titulo)
        i += 1
    
    data = datetime(2011, 03, 18, 00, 00)
    
    #Horário de Aula
    i=2
    while(data.day!=19):
        data = data + timedelta(minutes=15)
        sheet.write(i,0,data.strftime("%H:%M"), sub_titulo)
        i += 1
    i=2
    for local in lista_locais:
        lista_aulas_local = lista_aulas.filter(local=local)
        for aula in lista_aulas_local:
            posicao_inicial = (aula.inicio.hour*60 + aula.inicio.minute)/15 + 2
            posicao_final = (aula.fim.hour*60 + aula.fim.minute)/15 + 2
            nome_alunos = ''
            for aluno in aula.aluno.all():
                nome_alunos += aluno.nome+';'
            dados = 'Professor: '+aula.professor.detalheusuario.nome+' Materia: '+aula.tipo+'  Aluno(s):'+nome_alunos 
            sheet.write_merge(posicao_inicial, posicao_final, i, i,dados, aula_font)
        i += 1
        
    #Tamanho da Célula
    sheet.col(0).width = 2000
    i = 1
    for local in lista_locais:
        sheet.col(i).width = 4000
        i+=1
    
    return None

def exporta_aulas_dia (request):
    #Abrindo uma nova tabela
    export = Workbook(encoding="utf-8")
    nome_unidade = request.POST['unidade']
    data_aula = request.POST['data_aula']
    data_aula = data_aula.split('/')
    dia = date(int(data_aula[2]), int(data_aula[1]), int(data_aula[0]))
    data_min = datetime(dia.year, dia.month, dia.day, 0, 0)
    data_max = datetime(dia.year, dia.month, dia.day + 1, 0, 0)
    #Adicionar aba
    dia = str(dia.day)+'/'+str(dia.month)+'/'+str(dia.year)
    sheet = export.add_sheet('Aulas do Dia')
    #Pega os dados
    unidade = Unidade.objects.get(nome=nome_unidade)
    lista_aulas = Aula.objects.filter(local__unidade=unidade).filter(inicio__gte=data_min).filter(fim__lte=data_max).filter(valido=True)
    #Imprime dados na tabela
    tabela_aulas_dia(lista_aulas, unidade, sheet)
    
    #Titulo
    sheet.write (0,0,nome_unidade+' - Aulas do dia '+dia,titulo)
    
    #Salvando o arquivo
    export.save(prefixo+'arquivos/excel/historico_de_aulas.xls')
    
    #download automático
    file = open(prefixo+'arquivos/excel/historico_de_aulas.xls',"rb+")
    mimetype, encoding = mimetypes.guess_type('historico_de_aulas.xls')
    response = HttpResponse(file.read(), mimetype=mimetype)
    response["Content-Disposition"]= 'application/force-download'
    response["Content-Disposition"]= 'attachment; filename=aulas.xls'
    return response

##########################################################
############## Tabela de Aulas em casa ####################
##########################################################
def tabela_aulas_casa(lista_aulas, unidade, sheet):
    sheet.merge(0,0,0,8)
    
    data = datetime(2011, 03, 18, 00, 00)
    
    #Horário de Aula
    i=2
    while(data.day!=19):
        data = data + timedelta(minutes=15)
        sheet.write(i,0,data.strftime("%H:%M"), sub_titulo)
        i += 1
    i=2
    
    i=1
    for aula in lista_aulas:
        nome_alunos = ''
        for aluno in aula.aluno.all():
            nome_alunos += aluno.nome+';'
            
        sheet.write(1,i,nome_alunos, sub_titulo)
        posicao_inicial = (aula.inicio.hour*60 + aula.inicio.minute)/15 + 2
        posicao_final = (aula.fim.hour*60 + aula.fim.minute)/15 + 2
        
        dados = 'Professor: '+aula.professor.detalheusuario.nome+' Materia: '+aula.tipo+'  Aluno(s):'+nome_alunos 
        sheet.write_merge(posicao_inicial, posicao_final, i, i,dados, aula_font)
        i += 1
        sheet.col(i).width = 4000
        
    #Tamanho da Célula
    sheet.col(0).width = 2000
    
    
    return None

def exporta_aulas_casa (request):
    #Abrindo uma nova tabela
    export = Workbook(encoding="utf-8")
    nome_unidade = request.POST['unidade']
    data_aula = request.POST['data_aula']
    data_aula = data_aula.split('/')
    dia = date(int(data_aula[2]), int(data_aula[1]), int(data_aula[0]))
    data_min = datetime(dia.year, dia.month, dia.day, 0, 0)
    data_max = datetime(dia.year, dia.month, dia.day + 1, 0, 0)
    #Adicionar aba
    dia = str(dia.day)+'/'+str(dia.month)+'/'+str(dia.year)
    sheet = export.add_sheet('Casa do Aluno')
    #Pega os dados
    unidade = Unidade.objects.get(nome=nome_unidade)
    lista_aulas = Aula.objects.filter(local__nome='Casa do Aluno').filter(inicio__gte=data_min).filter(fim__lte=data_max).filter(valido=True).filter(aluno__unidade=unidade)
    #Imprime dados na tabela
    tabela_aulas_casa(lista_aulas, unidade, sheet)
    
    #Titulo
    sheet.write (0,0,nome_unidade+' - Aulas do dia (Casa do Aluno) '+dia,titulo)
    
    #Salvando o arquivo
    export.save(prefixo+'arquivos/excel/historico_de_aulas.xls')
    
    #download automático
    file = open(prefixo+'arquivos/excel/historico_de_aulas.xls',"rb+")
    mimetype, encoding = mimetypes.guess_type('historico_de_aulas.xls')
    response = HttpResponse(file.read(), mimetype=mimetype)
    response["Content-Disposition"]= 'application/force-download'
    response["Content-Disposition"]= 'attachment; filename=aulas.xls'
    return response


#excel    
@permission_required('sistema.perm_cadastro_aluno')
def excel(request):
    ano_inicial = 2009
    data = datetime.now()
    ano_atual = data.year
    lista_anos = []
        
    while(ano_inicial<=ano_atual):
        lista_anos.append(ano_inicial)
        ano_inicial += 1
    
    lista_unidades = Unidade.objects.all()
    return render_to_response('excel.html', locals(), context_instance=RequestContext(request))     